/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.io.*;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.Advertentie;
import model.Lid;
import org.hibernate.Session;
import org.hibernate.Transaction;
import persistence.SessionManager;
import util.imageStreamHelper;

/**
 *
 * @author Johan
 */
public class AdvertentieToevoegenController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        System.out.println("-----------------------> AdvertentieToevoegenController - doGet - begin");
        Date nu = new Date();

        //gegevens opslaan in de database
        Session session = null;
        session = SessionManager.openSession();
        Transaction tx = session.beginTransaction();

        // Haal de huidige sessie op
        HttpSession sessie = request.getSession();
        //huidige lid uit de sessie halen
        Lid lid = (Lid) sessie.getAttribute("currentUser");

        String temptekst = request.getParameter("advAltTekst");
        Boolean advImagePathEmpty = true;
        String pathToAdvImage = request.getParameter("advImage");
        File fileAdvImage = null;

        String website = request.getParameter("webSite");
        String provincie = request.getParameter("state");

        // haal uit url of advertentie nieuw is of een reeds bestaande
        int advId;
        try {
            advId = Integer.parseInt(request.getParameter("advId"));
            System.out.println("advId: " + advId);
        } catch (Exception e) {
            advId = 0;
        }

        // Haal uit url of de advertentie verwijderd worden of niet       
        boolean advDel;
        try {
            if (request.getParameter("del").equals("true")) {
                advDel = true;
            } else {
                advDel = false;
            }
            System.out.println("advDel: " + advDel);

        } catch (Exception ex) {
            advDel = false;
        }


        if (advId > 0 && advDel) {
            // verwijderen van advertentie
            Advertentie updateAdv = (Advertentie) session.load(Advertentie.class, new Integer(advId));

            updateAdv.setAdvDeleted(true);
            session.update(updateAdv);
            tx.commit();


            //advertentie verwijder, geen rede om nog hier te blijven. We gaan naar de overzicht pagina
            System.out.println("-----------------------> AdvertentieToevoegenController - doGet - adv. verwijderd");
            String adres = "AdvertentieOverzicht";
            RequestDispatcher dispatcher = request.getRequestDispatcher(adres);
            dispatcher.forward(request, response);

        }

// Controle of er een plaatje wordt opgegeven
        System.out.println("----------------------------> " + pathToAdvImage);
        // if (pathToAdvImage.isEmpty()) {
        if (pathToAdvImage == null) {
            advImagePathEmpty = true;
            System.out.println("--> Er is geen pad aangegeven!");
            request.setAttribute("image", "Pad is leeg");
        } else {
            advImagePathEmpty = false;
            // dit is een lelijk stuk.... file moet in root c:\ staan
            // oplossing ligt in http://commons.apache.org/fileupload/using.html
            System.out.println("--> path to file: C:\\" + request.getParameter("advImage"));
            String longPathToFile = "C:\\" + request.getParameter("advImage");
            fileAdvImage = new File(longPathToFile);
        }

        if (advId > 0) {
            // updaten van advertentie
            Advertentie updateAdv = (Advertentie) session.load(Advertentie.class, new Integer(advId));
            updateAdv.setAdvAltTekst(temptekst);
            //controle of nieuwe advertente nene plaatje heeft
            if (!advImagePathEmpty) {
                byte[] advImagesBytes = imageStreamHelper.imageToByteStream(fileAdvImage);
                updateAdv.setAdvImage(advImagesBytes);
            }
            updateAdv.setAdvWebsite(website);
            updateAdv.setAdvProvincie(provincie);
            session.update(updateAdv);

        } else {
            //aanmaken van nieuwe advertentie
            Advertentie newAdv = new Advertentie();
            newAdv.setAdvDatum(nu);
            newAdv.setLid(lid);
            newAdv.setAdvDeleted(false);
            newAdv.setAdvNrOfClicks(0);
            newAdv.setAdvNrOfViews(0);
            newAdv.setAdvAltTekst(temptekst);
            //controle of nieuwe advertente nene plaatje heeft
            if (!advImagePathEmpty) {
                byte[] advImagesBytes = imageStreamHelper.imageToByteStream(fileAdvImage);
                newAdv.setAdvImage(advImagesBytes);
            }
            newAdv.setAdvWebsite(website);
            newAdv.setAdvProvincie(provincie);

            //saving nieuw advertentie to DB
            session.save(newAdv);
        }
        // and commit
        tx.commit();

        //doorgaan naar een overzichtcontroller die vervolgens de advertentie laat zien
        System.out.println("-----------------------> AdvertentieToevoegenController - doGet - einde");
        response.sendRedirect("AdvertentieOverzicht");

        session.close();
    }
}